package com.example.tester.controller;

import com.example.tester.annotation.LogWeb;
import com.example.tester.service.IStudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;


/**
 * @author lzh
 * @date 2019/9/6 - 16:43
 */

/**
 * @RestController = @Controller + @ResponseBody
 * 表示该Controller都返回Json格式
 */
@RestController
@Validated
public class StudentController {

    @Autowired
    IStudentService iStudentService;


    /**
     *
     * @RequestParam 参数介绍
     *
     * value="" 需要转化变量的名称
     * required=true/false  默认为true 表示必须传递参数
     * defaultValue="" 如果没有传递参数 默认值为"",
     *
     *
     * 如果请求参数 是纯数字，那么使用 @RequestParam时，
     * 可以根据自己的需求将方法参数类型设置为 Long、Integer、String，它将自动进行类型转换
     *
     */


    /**
     * getBySno
     * @param sno
     * @return
     */
    @GetMapping("getBySno")
    @LogWeb("后端校验test2")
    public Object test1(@RequestParam(required = true , value = "sno" ) Integer sno  ) {

        return iStudentService.queryStudentBySno(sno);
    }


    @GetMapping("getByNo")
    @LogWeb("后端校验test3")
    public Object test3(@RequestParam(required = false , value = "no" ,defaultValue = "1") Integer sno  ) {
        return iStudentService.queryStudentBySno(sno);
    }


    /**
     * 也可以不使用@RequestParam，
     * 直接接收，此时要求controller方法中的参数名称要跟form中name名称一致
     *
     * 这种方式不传参数后台会接收到NULL ,可能导致空指针错误
     *
     * http://localhost:8089/rest/reqTest?username=123&usernick=qwe
     *
     *
     * 直接在Controller中使用javax.validation 校验时
     * 必须 先在Controller类上加@Validated
     * 才能在控制器方法中使用 @NotBlank 、@Min 等注解
     *
     *
     *
     * @param username
     * @param usernick
     * @return
     */
    @RequestMapping(value="/reqTest", method = RequestMethod.GET)
    public String requestParamTest(@NotBlank(message = "{required}") String username,
                                   String usernick ,
                                   @Min(value = 1 ,message = "{min}") Integer no){
        System.out.println("username: " + username);
        System.out.println("usernick: " + usernick);
        System.out.println("no: " + no);
        return "hello";
    }

}
